""""""
"""
[课    题]：Python 爬取一个专门看小姐姐的图片网站

[课题介绍]：
    今天我们通过Python爬取小姐姐图片网站上的美图，零基础学会通用爬虫，
当然我们还可以实现多线程爬虫，加快爬虫速度

[授课老师]: 青灯教育-巳月     [课程时间]：20:00

[课程亮点]：
	1、系统分析目标网页
	2、html标签数据解析方法
	3、海量图片数据一键保存

[环境介绍]：
    python 3.8
    pycharm 2021专业版 >>> 激活码
    requests >>> pip install requests
    parsel >>> pip install parsel

课后的回放录播资料找助理老师：python10010

先听一下歌 等一下后面进来的同学, 20:05正式开始讲课 [有什么喜欢听的歌曲 也可以在公屏发一下]
相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以加木子老师微信: python10010

零基础同学 0
有基础同学 1

听课建议：
    1. 先听思路，代码可以课后找到木子老师要到录播之后敲
    2. 在写代码的时候，有哪一行看不懂可以直接在公屏上问
    3. 需要软件安装 学习资料的同学 可以直接加上木子老师
    
一. 分析网站 (思路分析)
    1. 确定需要爬取的内容
    2. 通过查看源代码分析数据内容

二. 爬虫流程
    1. 向目标网站发送请求（get，post）
    2. 获取数据（网页源代码）
    3. 解析网页（re正则表达式，css选择器，xpath，bs4，json） 提取每一个详情页的链接
    4. 向详情页发送请求
    5. 获取数据（网页源代码）
    6. 解析网页 （提取图片链接）
    7. 向图片链接发送请求
    8. 获取数据（图片二进制数据）
    9. 保存数据
"""
import requests
import parsel
import re
import os

for page in range(1, 11):
    print(f'==================正在爬取第{page}页==================')
    # 1.向目标网站发送请求（get，post）
    response = requests.get(f'https://www.kanxiaojiejie.com/page/{page}')
    # 2. 获取数据（网页源代码）
    data_html = response.text
    # 3. 解析网页（re正则表达式，css选择器，xpath，bs4，json） 提取每一个详情页的链接与标题
    zip_data = re.findall('<a href="(.*?)" target="_blank"rel="bookmark">(.*?)</a>', data_html)
    for url, title in zip_data:
        print(f'----------------正在爬取{title}----------------')
        if not os.path.exists('img/' + title):
            os.mkdir('img/' + title)
        # 4. 向详情页发送请求
        resp = requests.get(url)
        # 5. 获取数据（网页源代码）
        url_data = resp.text
        # 6. 解析网页 （提取图片链接）
        selector = parsel.Selector(url_data)
        img_list = selector.css('p>img::attr(src)').getall()
        """
        配合：老师，css语法有点看不懂，可以详细讲一下吗？
            css语法，这个说实话看不懂太正常了，因为这个css语法我教VIP学员都得一整节课两三个小时才能教会。公开课确实时间就两三个小时。
        我如果把这个css语法讲一遍, 可能得跟同学们通宵上课了。你后续想要去了解css语法可以直接去w3c网站上按照教程学习。
        """
        for img in img_list:
            # 7. 向图片链接发送请求
            # 8. 获取数据（图片二进制数据）
            img_data = requests.get(img).content
            # 9. 保存数据
            img_name = img.split('/')[-1]
            with open(f"img/{title}/{img_name}", mode='wb') as f:
                f.write(img_data)
            print(img_name, '爬取成功！！！')
        print(title,'爬取成功！！！')
